package com.zsj.service_oss.service.imp;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.zsj.service_oss.service.OssService;
import com.zsj.service_oss.util.OssPropertiesUtils;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.UUID;

@Service
@Slf4j
public class OssServiceImpl implements OssService {


    /**
     * 踩坑  这里生命的各种变量不能声明为全局变量
     * 不然会报错 为空
     */




    @Override
    public String uploadFileAvatar(MultipartFile file) {
        String endpoint = OssPropertiesUtils.END_POINT;
        String accessKeyId = OssPropertiesUtils.KEY_ID;
        String accessKeySecret = OssPropertiesUtils.KEY_SECRET;
        String bucketName = OssPropertiesUtils.BUCKET_NAME;
        String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
        String fileName = uuid + file.getOriginalFilename();

        //把文件按日期分类
        //获取当前日期
        String datePath = new DateTime().toString("yyyy/MM/dd");

        //拼接
        fileName = datePath + "/avatar" + "/" + fileName;

        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 填写本地文件的完整路径。如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件流。
            InputStream inputStream = file.getInputStream();
            // 依次填写Bucket名称（例如examplebucket）和Object完整路径（例如exampledir/exampleobject.txt）。Object完整路径中不能包含Bucket名称。
            ossClient.putObject(bucketName, fileName, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();

            //返回路径
            //https://edu-zsj-1010.oss-cn-beijing.aliyuncs.com/zsj.png
            String url = "https://" + bucketName + "." + endpoint + "/" + fileName;
            return url;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public String uploadFileGoodsImage(MultipartFile file) {
        if (file == null){
            log.error("this file is should be not null");
            return null;
        }
        String endpoint = OssPropertiesUtils.END_POINT;
        String accessKeyId = OssPropertiesUtils.KEY_ID;
        String accessKeySecret = OssPropertiesUtils.KEY_SECRET;
        String bucketName = OssPropertiesUtils.BUCKET_NAME;
        String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");

        String fileName = uuid + file.getOriginalFilename();
        log.info("name :{}",file.getOriginalFilename());

        //把文件按日期分类
        //获取当前日期
        String datePath = new DateTime().toString("yyyy/MM/dd");

        //拼接
        fileName = datePath + "/goods" + "/" + fileName+".png";

        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 填写本地文件的完整路径。如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件流。
            InputStream inputStream = file.getInputStream();
            // 依次填写Bucket名称（例如examplebucket）和Object完整路径（例如exampledir/exampleobject.txt）。Object完整路径中不能包含Bucket名称。
            ossClient.putObject(bucketName, fileName, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();

            //返回路径
            //https://edu-zsj-1010.oss-cn-beijing.aliyuncs.com/zsj.png
            String url = "https://" + bucketName + "." + endpoint + "/" + fileName;
            return url;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
